package com.seo.mapper.transaction;

import java.util.List;
import java.util.Map;

import com.seo.pojo.transaction.TransactionFlow;
import com.seo.pojo.transaction.TransactionFlowItem;
import com.seo.pojo.transaction.TransactionItem;
import com.seo.pojo.transaction.TransactionType;

public interface TransactionMapper {

    /**
     * 保存账单
     * @param tf 账单
     * @return 保存结果
     */
    int saveTransactionFlow(TransactionFlow tf);

    /**
     * 更新账单
     * @param tf 账单
     * @return 更新结果
     */
    int updateTransactionFlowCode(TransactionFlow tf);

    /**
     * 更新账单状态
     * @param params 参数
     * @return 更新结果
     */
    int updateTransactionFlowState(Map<String, Object> params);

    /**
     * 更新账单状态
     * @param tf 参数
     * @return 更新结果
     */
    int updateTransactionFlowStateByTf(TransactionFlow tf);

    /**
     * 保存账单子项
     * @param tfi 账单子项
     * @return 保存结果
     */
    int saveTransactionFlowItem(TransactionFlowItem tfi);

    /**
     * 通过账单号获取账单
     * @param transactionCode 账单号
     * @return 账单
     */
    TransactionFlow getTransactionFlowByCode(String transactionCode);

    /**
     * 通过账单ID获取账单
     * @param id 账单ID
     * @return 账单
     */
    TransactionFlow getTransactionFlowById(long id);

    /**
     * 返回账单子项列表
     * @param transactionId 账单ID
     * @return 账单子项列表
     */
    List<TransactionFlowItem> getTransactionFlowItemList(long transactionId);

    /**
     * 更新账单子项状态
     * @param params 参数
     * @return 更新结果
     */
    int updateTransactionFlowItemState(Map<String, Object> params);

    /**
     * 返回账单类型
     * @param code 账单类型编码
     * @return 账单类型
     */
    TransactionType getTransactionTypeByCode(String code);

    /**
     * 返回账单科目
     * @param code 账单科目编码
     * @return 账单科目
     */
    TransactionItem getTransactionItemByCode(String code);
    
    /**
     * 删除账单
     * @param transactionId 账单ID
     * @return
     */
    int deleteTransactionById(long transactionId);
    
    /**
     * 删除账单科目
     * @param transactionId
     * @return
     */
    int deleteTransactionItemById(long transactionId);

}
